<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // 构造函数： 根据对象的属性，创建对象 动态地添加属性，返回这个对象
        function Hero(name, age, sex, level) {
            this.name = name;
            this.age = age;
            this.sex = sex;
            this.level = level;

            this.sing = function (address) {
                console.log('来' + address + "开演唱会");
            }
        }

        //通过构造函数，创建一个对象
        let lvbu = new Hero('吕布', 22, true, 18);
        let zf = new Hero('张飞', 18, true, 22);
        console.log(typeof lvbu);
        console.log(lvbu.name);
        lvbu.sing1('郑州');

        /* 
        总结：
            1.构造函数就是类
            2.通过类这个模块 可以创建对象
            3， 类是对象公共属性和方法的抽取

        */

        /* 
        构造函数：
        
            1.作用，创建对象。
            2。返回值是一个对象，默认省略
            3， 封装的代码是给对象 多态的添加属性和方法
            4.this 是当前对象
            5.函数名用大驼峰
            6.配合关键字new使用
            7，构造函数和类是一码事
            8.就是对象公共属性和方法的抽取
            9、属性名和形参尽量保持一致，可读性强


            约定大于规范，规范大于编码
        */
    </script>
</body>

</html>